Godot3.5 でダメージ数値のフローティングテキストを出す
https://gyazo.com/8c626b24df65b2c293dc508df4adc802
最初はメッセージウインドウだけでダメージ数値を表示していたが、それだと見ない
基本的にプレイヤーは主人公と敵の位置を見ていて、メッセージウインドウは見ない
ターンベースのコマンドRPGであればメッセージウインドウをずっと見ているだろうが、テンポを良く動くローグライクにしたので視線先が違う
実装
https://gyazo.com/35cac86180d01dd580b7e50b984725f4
Position2Dノードの子ノードに LabelノードとTweenノードを置く
code:gd
extends Position2D
onready var tween = $Tween
var velocity = Vector2(50, -100)
var gravity = Vector2(0, 1)
var mass = 120
var text_scale = Vector2.ONE
var text setget set_text, get_text
func _ready():
tween.interpolate_property(self, "modulate",
Color(modulate.r, modulate.g, modulate.b, modulate.a),
Color(modulate.r, modulate.g, modulate.b, 0.0),
0.3, Tween.TRANS_LINEAR, Tween.EASE_OUT, 0.7)
tween.interpolate_property(self, "scale",
Vector2(0, 0),
text_scale,
0.2, Tween.TRANS_QUART, Tween.EASE_OUT)
tween.interpolate_property(self, "scale",
text_scale,
Vector2(0.4, 0.4),
0.6, Tween.TRANS_LINEAR, Tween.EASE_OUT, 0.6)
tween.interpolate_callback(self, 0.8, "destroy")
tween.start()
func _process(delta):
velocity += gravity * mass * delta
position += velocity * delta
func set_text(new_text):
$Label.text = str(new_text)
func get_text():
return $Label.text
func destroy():
queue_free()
フローティングテキストを表示したいタイミングでこのノードを instance() 生成し、text を設定すれば表示される。
code:gd
func add_player_floating_number(type, value):
var playerDamageFloatText = floaty_text.instance()
var player = get_player()
playerDamageFloatText.velocity = Vector2(rand_range(-4, 4), -70)
if type == NumberType.DAMAGE:
playerDamageFloatText.modulate = Color.pink
elif type == NumberType.RECOVER:
playerDamageFloatText.modulate = Color.green
playerDamageFloatText.text = value
player.add_child(playerDamageFloatText)
参考動画
https://www.youtube.com/watch?v=UlvBqz8bhCo
https://www.youtube.com/watch?v=uE4BIZ85Y9w